/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DATABASE;

/**
 *
 * @author Usuario
 */
import Negocio.Mail;
import Negocio.MailEnviado;
import Negocio.MailRecibido;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;


public class MailDB 
{
    
    public boolean mailsEnviados (MailEnviado mail) throws SQLException
	{		
                DatabaseManager db = new DatabaseManager();	
                Connection var= db.getConnection();
		Statement stmt = var.createStatement();
		boolean resultado=stmt.execute("INSERT INTO EMAIL VALUES(INCREMENTO_MAIL.NEXTVAL,'"+mail.getAsunto()+"','"+mail.getCuerpo()+"', '"+mail.getFecha()+"')" );
                stmt.execute("INSERT INTO ENVIADO VALUES(INCREMENTO_MAIL.CURRVAL,'"+mail.getDestinatario()+"')" );
                var.commit();
                db.getConnection().close();
		return resultado;
	}
    
    
    public boolean mailsGuardados(MailEnviado mail) throws SQLException 
    {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            boolean resultado=stmt.execute("INSERT INTO EMAIL VALUES(INCREMENTO_MAIL.NEXTVAL,'"+mail.getAsunto()+"','"+mail.getCuerpo()+"', '"+mail.getFecha()+"')" );
            stmt.execute("INSERT INTO BORRADOR VALUES(INCREMENTO_MAIL.CURRVAL,'"+mail.getDestinatario()+"')" );
            var.commit();
            db.getConnection().close();
            return resultado;
            
    }
    
    public void mailsSpam(MailRecibido mail) throws SQLException 
    {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            stmt.execute("DELETE FROM RECIBIDO WHERE ID_RECIBIDO="+mail.getId_mail());
            stmt.execute("INSERT INTO SPAM VALUES("+mail.getId_mail()+",'"+mail.getRemitente()+"')" );
            
            var.commit();
            db.getConnection().close();    
    }
    
     public void mailsEliminados(MailRecibido mail) throws SQLException 
    {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            stmt.execute("DELETE FROM RECIBIDO WHERE ID_RECIBIDO="+mail.getId_mail());
            stmt.execute("INSERT INTO ELIMINADO VALUES("+mail.getId_mail()+",'"+mail.getRemitente()+"')" );
            
            var.commit();
            db.getConnection().close();    
    }
    
      public void mailsDevueltos(MailRecibido mail) throws SQLException {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            System.out.println(mail.getId_mail()+""+mail.getRemitente());
            stmt.execute("DELETE FROM ELIMINADO WHERE ID_ELIMINADO="+mail.getId_mail());
            stmt.execute("INSERT INTO RECIBIDO VALUES("+mail.getId_mail()+",'"+mail.getRemitente()+"')" );
            
            var.commit();
            db.getConnection().close();
    }
     
     public void mailsDeshacerEtiqueta(MailRecibido mail) throws SQLException {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            stmt.execute("DELETE FROM MAIL_ETIQUETA WHERE ID_MAIL="+mail.getId_mail()+"AND ID_ETIQUETA="+mail.getEtiqueta());
            
            
            var.commit();
            db.getConnection().close();
    }
     
    public ArrayList listarRecibidos(String sql) throws SQLException 
    {
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        ResultSet resultado = stmt.executeQuery(sql);
        ArrayList todos = new ArrayList();
        while (resultado.next())
        {
            System.out.println("hola!!");
            MailRecibido mailRecibido = new MailRecibido(Integer.parseInt(resultado.getString("ID_MAIL")),resultado.getString("REMITENTE"),resultado.getString("ASUNTO"),resultado.getString("CUERPO"),resultado.getString("FECHA"),resultado.getInt("ID_ESTADO"));
            todos.add(mailRecibido);
            System.out.println(resultado.getString("REMITENTE"));
        }
        
        db.getConnection().close();
        return todos;
    }
    
    public ArrayList listarEnviados(String sql) throws SQLException 
        {
            DatabaseManager db = new DatabaseManager();
            Connection var = db.getConnection();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery(sql);
            ArrayList enviados = new ArrayList();
            while (resultado.next())
            {
                MailEnviado mailEnviado = new MailEnviado(Integer.parseInt(resultado.getString("ID_MAIL")),resultado.getString("DESTINATARIO"),resultado.getString("ASUNTO"),resultado.getString("CUERPO"),resultado.getString("FECHA"));
                enviados.add(mailEnviado);
            }

            db.getConnection().close();
            return enviados;
    
        }
    
    
    public ArrayList listarGuardados(String sql) throws SQLException 
        {
            DatabaseManager db = new DatabaseManager();
            Connection var = db.getConnection();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery(sql);
            ArrayList enviados = new ArrayList();
            while (resultado.next())
            {
                
                MailEnviado mailEnviado = new MailEnviado(Integer.parseInt(resultado.getString("ID_MAIL")),resultado.getString("DESTINATARIO"),resultado.getString("ASUNTO"),resultado.getString("CUERPO"),resultado.getString("FECHA"));
                enviados.add(mailEnviado);
            }

            db.getConnection().close();
            return enviados;
    
        }

      
    public ArrayList listarEtiquetados(String sql) throws SQLException 
    {
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        ResultSet resultado = stmt.executeQuery(sql);
        
        ArrayList todos = new ArrayList();
        while (resultado.next())
        {
           // MailRecibido mailRecibido = new MailRecibido1(resultado.getInt("ID_MAIL"),resultado.getString("REMITENTE"),resultado.getString("ASUNTO"),resultado.getString("FECHA"),resultado.getString("ID_ETIQUETA"));
            MailRecibido mailRecibido = new MailRecibido();
            mailRecibido.setId_mail(resultado.getInt("ID_MAIL"));
            mailRecibido.setRemitente(resultado.getString("REMITENTE"));
            mailRecibido.setAsunto(resultado.getString("ASUNTO"));
            mailRecibido.setFecha(resultado.getString("FECHA"));
            mailRecibido.setEtiqueta(resultado.getString("ID_ETIQUETA"));
            todos.add(mailRecibido);
            
        }
        
        db.getConnection().close();
        return todos;
    }
    
    public boolean enviarBorrador(MailEnviado mail) throws SQLException {
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            boolean resultado= stmt.execute("DELETE FROM BORRADOR WHERE ID_BORRADOR="+mail.getId_mail()+"" );
            stmt.execute("DELETE FROM EMAIL WHERE ID_MAIL="+mail.getId_mail()+"" );
            stmt.execute("INSERT INTO EMAIL VALUES("+mail.getId_mail()+",'"+mail.getAsunto()+"','"+mail.getCuerpo()+"', '"+mail.getFecha()+"')" );
            stmt.execute("INSERT INTO ENVIADO VALUES("+mail.getId_mail()+",'"+mail.getDestinatario()+"')" );
            var.commit();
            db.getConnection().close();
            return resultado;
    }
    
    
    public boolean insertarEtiqueta (int id_mail, int id_etiqueta ) throws SQLException
	{		
                DatabaseManager db = new DatabaseManager();	
                Connection var= db.getConnection();
		Statement stmt = var.createStatement();
                System.out.println(Integer.toString(id_mail));
                System.out.println(Integer.toString(id_etiqueta));
                System.out.println("INSERT INTO MAIL_ETIQUETA VALUES("+id_mail+","+id_etiqueta+")" );
		boolean resultado=stmt.execute("INSERT INTO MAIL_ETIQUETA VALUES("+id_mail+","+id_etiqueta+")" );
                System.out.println("Hola");
                var.commit();
                db.getConnection().close();
		return resultado;
	}
    
    
    public boolean moverMail(int id_carpeta, int id_mail) throws SQLException {
        
                DatabaseManager db = new DatabaseManager();	
                Connection var= db.getConnection();
		Statement stmt = var.createStatement();
		//boolean resultado=stmt.execute("INSERT INTO EMAIL VALUES(INCREMENTO_MAIL.NEXTVAL,'"+mail.getAsunto()+"','"+mail.getCuerpo()+"', '"+mail.getFecha()+"')" );
                boolean resultado = stmt.execute("INSERT INTO CARPETA_EMAIL VALUES("+id_carpeta+","+id_mail+")" );
                var.commit();
                db.getConnection().close();
                return resultado;
	
    }

    public boolean eliminarCarpetaMail(int id_mail) throws SQLException{
        DatabaseManager db = new DatabaseManager();	
        Connection var= db.getConnection();
	Statement stmt = var.createStatement();
	boolean resultado = stmt.execute("DELETE FROM CARPETA_EMAIL WHERE ID_MAIL="+id_mail);
        var.commit();
        db.getConnection().close();
        return resultado;
    }

    public boolean marcarLeido(int id_mail) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();	
        Connection var= db.getConnection();
	Statement stmt = var.createStatement();
	boolean resultado = stmt.execute("UPDATE ESTADO SET ID_ESTADO = 0 WHERE ID_MAIL="+id_mail);
        var.commit();
        db.getConnection().close();
        return resultado;
    }

    public int numeroLeidos(String sql) throws SQLException 
    {
        DatabaseManager db = new DatabaseManager();	
        Connection var= db.getConnection();
	Statement stmt = var.createStatement();
        ResultSet resultado = stmt.executeQuery(sql);
        //ArrayList enviados = new ArrayList();
        int numNoLeidos=0;
            while (resultado.next())
            {
                numNoLeidos=resultado.getInt("NO_LEIDOS");
            }
	//stmt.execute("UPDATE RECIBIDO SET ESTADO = 0 WHERE ID_RECIBIDO=");
        var.commit();
        db.getConnection().close();
        return numNoLeidos;
        //return resultado;
    }

    public void guardarEliminado(int id_mail,String remitente) throws SQLException {
        DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            stmt.execute("DELETE FROM RECIBIDO WHERE ID_RECIBIDO="+id_mail);
            stmt.execute("INSERT INTO ELIMINADO VALUES("+id_mail+",'"+remitente+"')" );
            
            var.commit();
            db.getConnection().close(); 
    }

    public ArrayList listarEliminados(String sql) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        ResultSet resultado = stmt.executeQuery(sql);
        ArrayList todos = new ArrayList();
        while (resultado.next())
        {
            System.out.println("hola!!");
            MailRecibido mailRecibido = new MailRecibido(Integer.parseInt(resultado.getString("ID_MAIL")),resultado.getString("REMITENTE"),resultado.getString("ASUNTO"),resultado.getString("CUERPO"),resultado.getString("FECHA"),resultado.getInt("ID_ESTADO"));
           todos.add(mailRecibido);
            System.out.println(resultado.getString("REMITENTE"));
        }
        
        db.getConnection().close();
        return todos;
    }
    
      public ArrayList listadoSpam(String sql) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        ResultSet resultado = stmt.executeQuery(sql);
        ArrayList todos = new ArrayList();
        while (resultado.next())
        {
            System.out.println("hola!!");
            MailRecibido mailRecibido = new MailRecibido(Integer.parseInt(resultado.getString("ID_MAIL")),resultado.getString("REMITENTE"),resultado.getString("ASUNTO"),resultado.getString("CUERPO"),resultado.getString("FECHA"),resultado.getInt("ID_ESTADO"));
            todos.add(mailRecibido);
            System.out.println(resultado.getString("REMITENTE"));
        }
        
        db.getConnection().close();
        return todos;
    }

    public boolean Loguear(String usuario, String contraseña) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();	
        Connection var= db.getConnection();
	Statement stmt = var.createStatement();
	ResultSet resultado = stmt.executeQuery("SELECT *FROM USUARIO WHERE NOMBRE='"+usuario+"' AND CONTRASEÑA='"+contraseña+"'");
        if(resultado.next())
        {    
            var.commit();
            db.getConnection().close();
            return true;
        }
        
        
        db.getConnection().close();
        return false;
    }

    public void cambiarServidor(String servidor) throws SQLException {
        
            DatabaseManager db = new DatabaseManager();	
            Connection var= db.getConnection();
            Statement stmt = var.createStatement();
            if (servidor.equalsIgnoreCase("SENDMAIL"))
            {
                stmt.executeUpdate("UPDATE SERVIDOR SET ESTADO = 1 WHERE ID_SERVIDOR=1");
                stmt.executeUpdate("UPDATE SERVIDOR SET ESTADO = 0 WHERE ID_SERVIDOR=2");
                System.out.println("Cambio a SendMail");
            }
            else
            {
                stmt.executeUpdate("UPDATE SERVIDOR SET ESTADO = 0 WHERE ID_SERVIDOR=1");
                stmt.executeUpdate("UPDATE SERVIDOR SET ESTADO = 1 WHERE ID_SERVIDOR=2");
                System.out.println("Cambio a PostFix");
            }
            var.commit();
            db.getConnection().close();
    }

    public int cargarServidor() throws SQLException 
    {
        DatabaseManager db = new DatabaseManager();	
        Connection var= db.getConnection();
	Statement stmt = var.createStatement();
        int servidor = -1;
	ResultSet resultado = stmt.executeQuery("SELECT *FROM SERVIDOR WHERE ESTADO=1");
        if(resultado.next())
        {    
            servidor=resultado.getInt("ID_SERVIDOR");
            
        }
        
        var.commit();
        db.getConnection().close();
        return servidor;
        
        
        //db.getConnection().close();
        //return null;
        
    }

     
        
}

